<?php namespace abc777;
// +----------------------------------------------------------------------
// | 数据验证
// +----------------------------------------------------------------------
// | Author: TongBC <501468940@qq.com>
// +----------------------------------------------------------------------
// | Date  : 2015/05/20
// +----------------------------------------------------------------------
// | 特别说明：个人文件，请勿修改，如需修改，请采用类的继承或联系本人
// +----------------------------------------------------------------------
class Validate{
	
	// 计算身份证校验码，根据国家标准GB 11643-1999
    public static function idcard_verify_number($idcard_base){
        if(strlen($idcard_base)!=17) return false;
        //加权因子
        $factor = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);

        //效验码对应值
        $verify_number_list = array('1','0','X','9','8','7','6','5','4','3','2');
        $checksum = 0;
        for($i=0;$i<strlen($idcard_base);$i++){
            $checksum += substr($idcard_base,$i,1) * $factor[$i];
        }

        $mod = $checksum % 11;
        $verify_number = $verify_number_list[$mod];
        return $verify_number;
    }

    // 将15位身份证升级到18位
    public static function idcard_15to18($idcard){
        if(strlen($idcard)!=15) return false;
        // 如果身份证顺序码是996 997 998 999，这些是为百岁以上老人的特殊编码
		$idcard = (array_search(substr($idcard,12,3),array('996','997','998','999'))!==false)?
		substr($idcard,0,6).'18'.substr($idcard,6,9):substr($idcard,0,6).'19'.substr($idcard,6,9);
        $idcard = $idcard.(self::idcard_verify_number($idcard));
        return $idcard;
    }

    // 18位身份证校验码有效性检查
    public static function isIDCard($idcard){
        if(strlen($idcard)!=18) return false;
        $idcard_base = substr($idcard, 0, 17);
        return (self::idcard_verify_number($idcard_base)!=strtoupper(substr($idcard,17,1))) ? false:true;
    }
	
	// 判断url地址是否正确
	public static function isUrl($url){
		return preg_match('/http:\/\/[\w.]+[\w\/]*[\w.]*\??[\w=&\+\%]*/is',$url) ? true:false;
    }
	
	// 判断是否是手机号
	public static function isMobile($mobile){
		if(strlen($mobile)!=11) return false;
		// if(!in_array(substr($mobile,0,3), array('133','139','188','187','189','158','137','147','185'))) return false;
		return preg_match("/1[34587]{1}\d{9}$/",$mobile) ? true:false;
	}
	
	// 数据转义
	public static function addslashes($data){
		if(is_array($data)){
			foreach($data as $key=>$value)
				$data[$key] = self::addslashes($value);
			return $data;
		}
		return addslashes($data);
	}
	
}
